<?php
/**
 * 自动处理菜品信息脚本
 * 用于Windows定时任务执行
 */

// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');

// 定义应用入口
define('APP_AUTO_RUN', true);

// 添加日志记录功能
function logMessage($message) {
    $logFile = __DIR__ . '/auto_process_dish_info.log';
    $timestamp = date('Y-m-d H:i:s');
    file_put_contents($logFile, "[{$timestamp}] {$message}\n", FILE_APPEND | LOCK_EX);
    echo "[{$timestamp}] {$message}\n";
}

// 创建一个专门用于CLI的处理方法
function processDishInfoCLI() {
    try {
        logMessage("开始执行菜品信息处理");
        
        // 引入数据库类
        require_once __DIR__ . '/../thinkphp/library/think/Db.php';
        require_once __DIR__ . '/../application/api/controller/FoodIngredient.php';
        
        // 使用ThinkPHP的数据库操作
        $config = include __DIR__ . '/application/database.php';
        \think\Db::setConfig($config);
        
        // 直接从数据库获取未处理的菜品（ai_called = 0），限制每次处理10个
        $dishes = \think\Db::name('food_dish')
            ->where('ai_called', 0)
            ->field('id, name')
            ->limit(10)
            ->select();
            
        logMessage('查询到的菜品数据: ' . json_encode($dishes, JSON_UNESCAPED_UNICODE));
            
        if (empty($dishes)) {
            logMessage('没有需要处理的菜品');
            return;
        }
        
        logMessage('获取到未处理菜品数量: ' . count($dishes));
        
        // 创建控制器实例并调用相关方法
        $controller = new \app\api\controller\FoodIngredient();
        
        // 调用阿里云千问API批量获取制作信息
        logMessage('开始调用千问API');
        $result = $controller->batchQueryDishInfoByQwen($dishes);
        logMessage('API返回结果: ' . json_encode($result, JSON_UNESCAPED_UNICODE));
        
        if (empty($result)) {
            logMessage('获取菜品制作信息失败，API返回空结果');
            return;
        }
        
        // 处理返回的数据，匹配食材ID
        logMessage('开始处理返回数据');
        $processedResult = $controller->processBatchDishInfo($result, $dishes);
        logMessage('处理后的结果: ' . json_encode($processedResult, JSON_UNESCAPED_UNICODE));
        
        if (empty($processedResult)) {
            logMessage('处理菜品信息失败，处理结果为空');
            return;
        }
        
        // 更新数据库
        logMessage('开始更新数据库');
        $updateResult = $controller->updateDishInfo($processedResult);
        logMessage('数据库更新结果: ' . json_encode($updateResult, JSON_UNESCAPED_UNICODE));
        
        logMessage("处理成功");
        
    } catch (\Exception $e) {
        $errorMsg = "执行过程中发生错误: " . $e->getMessage();
        $errorFile = "错误文件: " . $e->getFile();
        $errorLine = "错误行号: " . $e->getLine();
        logMessage($errorMsg);
        logMessage($errorFile);
        logMessage($errorLine);
        logMessage("堆栈跟踪: " . $e->getTraceAsString());
    }
}

try {
    logMessage("开始执行自动处理菜品信息任务");
    
    // 引入ThinkPHP入口文件
    require __DIR__ . '/../thinkphp/base.php';
    
    // 初始化应用
    \think\App::run();
    
    // 执行处理
    processDishInfoCLI();
    
    logMessage("任务执行完成");
    
} catch (\Exception $e) {
    $errorMsg = "执行过程中发生错误: " . $e->getMessage();
    $errorFile = "错误文件: " . $e->getFile();
    $errorLine = "错误行号: " . $e->getLine();
    logMessage($errorMsg);
    logMessage($errorFile);
    logMessage($errorLine);
    logMessage("堆栈跟踪: " . $e->getTraceAsString());
}

logMessage("脚本执行结束");
?>